package com.atguigu.spring.responsibilityChain;

import org.springframework.web.servlet.DispatcherServlet;

/**
 * @program: design-patterns
 * @author: yangshen
 * @description: 责任链模式
    职责链模式在SpringMVC框架应用的源码分析
        - springmvc 请求的流程图中，执行了 拦截器相关方法 interceptor.preHandler 等等
        - 在处理SpringMvc请求时，使用到职责链模式还使用到适配器模式
        - HandlerExecutionChain 主要负责的是请求拦截器的执行和请求处理,但是他本身不处理请求，只是将请求分配给链上注册处理器执行，这是职责链实现方式,减少职责
            链本身与处理逻辑之间的耦合,规范了处理流程
        - HandlerExecutionChain 维护了 HandlerInterceptor 的集合， 可以向其中注册相应的拦截器.
 * @create: 2022-04-06 01:27
 **/
public class ResponsibilityChain {
    /**
     * 说明
     * protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
     *    HandlerExecutionChain mappedHandler = null;
     *    mappedHandler = this.getHandler(processedRequest); //1.获取到了 HandleExecutionChain 对象
     *
     *    //2.1在 mappedHandler.applyPreHandle 方法内部得到了 HandlerInterceptor interceptor 拦截器对象，并调用所有拦截器的 interceptor.preHandle 方法
     *    if (!mappedHandler.applyPreHandle(processedRequest, response))
     *
     *    //2.2该方法内部获取到拦截器，并调用拦截器的 interceptor.postHandle 方法
     *    mappedHandler.applyPostHandle(processedRequest, response, mv);
     *
     *    //2.3在 mappedHandler.applyPreHandle 方法中还调用了 triggerAfterCompletion（该方法中调用了afterCompletion方法） 方法
     *    interceptor.afterCompletion(request, response, this.handler, ex);
     * }
     */
    private DispatcherServlet dispatcherServlet;
    public static void main(String[] args) {
        /*
         *
         */

    }
}
